Neural network support webgpu #138
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds
webgpusupport for neuralNetwork so it can be used without calledml5.setBackend.Changes:
readSyncas @lindapaiste suggested.await tf.ready()to theinitfunction ofDiyNeuralNetwork@lindapaiste suggested.copyandcrossoverto async, support both promise and callback interface.The
ml5.neuralNetworkfunction is technically an async operation like with other models. It should be called with a callback function or placed within p5preloadfunction. Our examples, however, have been treatingml5.neuralNetworklike a synchronous function since it sometimes (when not loading data) behaves synchronously. The changes from this PR addsawait tf.ready()thus making it definitively asynchronous.The functions
copyandcrossoveralso instantiate the neuralNetwork object, which is why they have to be async.I updated all example sketches, removing
ml5.setBackendand moving theml5.nerualNetworkfunction topreloadfor non neuroevolution examples.The neuroevolution examples are kept on
cpubackend for performance. Adapting for asynccopyandcrossoverslightly complicates those examples but I think they are still fairly readable. Theml5.neuralNetworkcalls in neuroevolution examples are still synchronous, but they seem to not cause any error for now. I will try to come up with a clean way to adapt them to async.